# coding = utf-8
# Author: 柚一
from parse.CaceParser import case_parser


class CasesPlugin:
    # pytest_addoption钩子函数是固定的
    # 我有个自定义函数，你来调用我吧
    def pytest_addoption(self, parser):
        # parser.addoption固定的写法 告诉我要传类型的数据  目录是怎样的
        parser.addoption("--type", action='store', default='yaml', help="测试用例的类型")
        parser.addoption("--cases", action='store', default='./examples', help="测试用例的目录")

    # 动态的生成用例数据  参数化处理
    def pytest_generate_tests(self, metafunc):
        # 获取用例类型  pytest官方文档 https://docs.pytest.org/en/latest/reference/reference.html#config
        # 获取命令行参数的值
        case_type = metafunc.config.getoption('type')
        case_dir = metafunc.config.getoption('cases')
        # 解析用例数据
        data=case_parser(case_type,case_dir)
        # caseinfo对应的是核心执行器里面的参数
        # 把测试数据交给核心执行器去执行用例
        if "caseinfo" in metafunc.fixturenames:
            metafunc.parametrize("caseinfo", data['case_info'], ids=data['case_name'])

    # 中文转码
    def pytest_collection_modifyitems(self, items):
        for item in items:
            item.name = item.name.encode("utf-8").decode("unicode_escape")
            item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")